DAL ReadAll of SelectAll methode
Home

DAL ReadAll of SelectAll methode

DAL ReadAll of SelectAll methode

Alle rijen uit SQL tabel omzetten naar een C# gegevenstructuur (Object Relational Mapping of ORM). Soms gebruiken we de CRUD terminologie en soms de SQL terminologie.

Probleem

We moeten alle rienj uit een SQL tabel kunnen omzetten naar een gegevenstype dat door C# begrepen en gemanipuleerd kan worden.

Design

We zetten één rij van de tabel om in een object van het type EventCategory model. En alle rijen stoppen we in een generieke lijst EventCategory objecten. We moeten er rekening mee houden dat een kolom in SQL de waarde NULL kan hebben. Om geen foutemelding in C# te krijgen moeten we die mogelijkheid onderscheppen door eerst te testen als de kolom geen NULL waarde heeft. Dat doen we met de IsDbNull methode. De GetOrdinal methode retourneert het volgnummer van de kolom in de tabel en dus ook in de datadictionary die door de datareader geretourneerd wordt.

Oplossing

public List<Bll.EventCategory> ReadAll()
{
    List<Bll.EventCategory> list = new List<Bll.EventCategory>();
    MySqlConnection connection = new MySqlConnection(this.connectionString);
    // in de CommandText parameter geven we de naam van de stored procedure mee
    MySqlCommand command = new MySqlCommand("EventCategorySelectAll", connection);
    // zeg aan het command object dat het een stored procedure
    // zal krijgen en geen SQL Statement
    command.CommandType = CommandType.StoredProcedure;
    Message = "Niets te melden";
    // we gaan ervan uit dat het mislukt
    MySqlDataReader result = null;
    RowCount = 0;
    using (connection)
    {
        try
        {
            connection.Open();
            //Verbinding geslaagd
            Message = "Connectie is open";

            using (result = command.ExecuteReader())
            {
                if (result.HasRows)
                {
                    int counter = 0;
                    // lees de gevonden rij in
                    while (result.Read())
                    {
                        counter++;
                        Bll.EventCategory bll = new Bll.EventCategory();
                        bll.Name = (result.IsDBNull(result.GetOrdinal("Name")) ? "" : result["Name"].ToString());
                        bll.Id = (result.IsDBNull(result.GetOrdinal("Id")) ? 0 : Int32.Parse(result["Id"].ToString()));
                        list.Add(bll);
                    }
                    this.message = "EventCategory rijen gevonden.";
                    RowCount = counter;
                }
                else
                {
                    this.message = "Geen EventCategory rijen gevonden.";
                }
            }
        }
        catch (MySqlException e)
        {
            this.message = e.Message;
        }
    }
    return list;
}

Testen

  1. Verwijder alle methoden in IDal die nog niet geïmplementeerd zijn:
    using System.Collections.Generic;
    namespace FricFrac.Dal
    {
        interface IDal<T>
        {
            string Message { get; }
            int RowCount { get; }
            List<T> ReadAll();
        }
    }
  2. Voeg in het bestand Learning.cs de volgende methode toe:
    public static void FricFracDalTest()
    {
        Console.WriteLine("Fric-frac DAL test");
        FricFrac.Dal.EventCategory dal = new FricFrac.Dal.EventCategory();
        List<FricFrac.Bll.EventCategory> list = dal.ReadAll();
        Console.WriteLine($"{dal.RowCount} {dal.Message}");
        foreach (FricFrac.Bll.EventCategory item in list)
            Console.WriteLine("{0} {1}", item.Id, item.Name);
    }
  3. Roep de methode op in Program.cs:
    using System;
    namespace AdoDotNet
    {
        class Program
        {
            public static void Main(string[] args)
            {
                Console.WriteLine("Leren werken met ADO.NET in .NET Core!");
                // Learning.TestMySqlConnector();
                // Learning.ReflectPropertiesTryOut();
                // Learning.LearnDotNetCoreConfigurationApi();
                Learning.FricFracDalTest();
                Console.ReadKey();
            }
        }
    }
  4. En dat is het resultaat:
    Visual Studio Result Test ADO.NET DAL ReadAll
    Visual Studio Result Test ADO.NET DAL ReadAll
  5. Tijd om eens te gaan kijken op Cloud9 of de code, die in VS geschreven is, overdraagbaar is naar Linux:
    1. ga naar PowerShell
      1. inspecteer welke bestanden verzameld moeten worden met
        git status
      2. Check of je .gitignore bestand up to data is:
      3. Indien je het .gitignore bestand wijzigt, maak eerst de verzamelplaats leeg met
        git rm -rf --cached .
      4. verzamel de bestanden met
        git add --all
      5. leg de bestanden neer met
        git commit -m "ADO.NET Fric-frac tot en met test DAL ReadAll"
      6. zet de neergelegde bestanden op je repo op Bitbucket met
        git push -u origin master
    2. ga naar Cloud9 en open je workspace, in ons voorbeeld is dat Programmeren3
      1. typ in het Terminal venster:
        git pull origin master
      2. ga naar de map
        cd dotnetcore/adodotnet/adodotnet
      3. start het programma met
        dotnet run
    3. En dat is het resultaat:
      Cloud9 Result Test ADO.NET DAL ReadAll
      Cloud9 Result Test ADO.NET DAL ReadAll

JI
2017-09-15 15:25:40